import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEDataSet } from '../ds/ipsdedata-set';
import { IPSDEUserRoleOPPriv } from './ipsdeuser-role-oppriv';
import { IPSSysUserDR } from '../../security/ipssys-user-dr';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEUserRole
 */
export interface IPSDEUserRole extends IPSDataEntityObject {
  /**
   * 自定义条件
   * @type {string}
   */
  customCond: string;

  /**
   * 自定义数据范围模式
   * @type {string}
   */
  customDRMode: string;

  /**
   * 自定义数据范围模式2
   * @type {string}
   */
  customDRMode2: string;

  /**
   * 自定义数据范围2参数
   * @type {string}
   */
  customDRMode2Param: string;

  /**
   * 自定义数据范围参数
   * @type {string}
   */
  customDRModeParam: string;

  /**
   * 机构数据范围
   * @description 值模式 [部件处理组织数据范围] {1：当前组织、 2：上级组织、 4：下级组织、 8：无组织值 }
   * @type {( number | 1 | 2 | 4 | 8)}
   * @default 0
   */
  orgDR: number | 1 | 2 | 4 | 8;

  /**
   * 实体数据集
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 实体数据集
   *
   * @type {IPSDEDataSet}
   */
  get psDEDataSet(): IPSDEDataSet | null;

  /**
   * 实体数据集（必须存在）
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSetMust(): IPSDEDataSet;

  /**
   * 授权操作标识集合
   *
   * @type {IPSDEUserRoleOPPriv[]}
   */
  getPSDEUserRoleOPPrivs(): IPSDEUserRoleOPPriv[] | null;

  /**
   * 授权操作标识集合
   *
   * @type {IPSDEUserRoleOPPriv[]}
   */
  get psDEUserRoleOPPrivs(): IPSDEUserRoleOPPriv[] | null;

  findPSDEUserRoleOPPriv(objKey: any): IPSDEUserRoleOPPriv | null;

  /**
   * 用户数据范围对象
   *
   * @type {IPSSysUserDR}
   */
  getPSSysUserDR(): IPSSysUserDR | null;

  /**
   * 用户数据范围对象
   *
   * @type {IPSSysUserDR}
   */
  get psSysUserDR(): IPSSysUserDR | null;

  /**
   * 用户数据范围对象（必须存在）
   *
   * @type {IPSSysUserDR}
   */
  getPSSysUserDRMust(): IPSSysUserDR;

  /**
   * 用户数据范围对象2
   *
   * @type {IPSSysUserDR}
   */
  getPSSysUserDR2(): IPSSysUserDR | null;

  /**
   * 用户数据范围对象2
   *
   * @type {IPSSysUserDR}
   */
  get psSysUserDR2(): IPSSysUserDR | null;

  /**
   * 用户数据范围对象2（必须存在）
   *
   * @type {IPSSysUserDR}
   */
  getPSSysUserDR2Must(): IPSSysUserDR;

  /**
   * 角色标记
   * @type {string}
   */
  roleTag: string;

  /**
   * 部门业务条件
   * @type {string}
   */
  secBC: string;

  /**
   * 部门数据范围
   * @description 值模式 [部件处理部门数据范围] {1：当前部门、 2：上级部门、 4：下级部门、 8：无部门值 }
   * @type {( number | 1 | 2 | 4 | 8)}
   * @default 0
   */
  secDR: number | 1 | 2 | 4 | 8;

  /**
   * 数据访问使用操作标识
   * @type {string}
   */
  userDRAction: string;

  /**
   * 全部数据
   * @type {boolean}
   * @default false
   */
  allData: boolean;

  /**
   * 默认角色
   * @type {boolean}
   * @default false
   */
  defaultMode: boolean;

  /**
   * 支持机构数据范围
   * @type {boolean}
   * @default false
   */
  enableOrgDR: boolean;

  /**
   * 支持部门业务条线
   * @type {boolean}
   * @default false
   */
  enableSecBC: boolean;

  /**
   * 支持部门数据范围
   * @type {boolean}
   * @default false
   */
  enableSecDR: boolean;

  /**
   * 启用用户数据范围
   * @type {boolean}
   * @default false
   */
  enableUserDR: boolean;

  /**
   * 系统保留
   * @type {boolean}
   * @default false
   */
  systemReserved: boolean;
}
